/**
 * @file msg.h
 * @author Marco Luisi
 * @brief
 */

#ifndef MSG_H_
#define MSG_H_

#include "comsock.h"
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <unistd.h>

#define STDIN 0
#define STDOUT 1
#define STDERR 2

#define USERNAMELEN 256

/*Messaggi di errore*/
#define ERR_MEM "Errore nell'allocazione di memoria!\n"

typedef struct {
	char *name;
	char *msg;
	unsigned int dim;
}msg_buffer;
;

int newMessage(char, char*, message_t*,int); //o forse basta void
void deleteMessage(message_t *);

void extract(message_t*, msg_buffer*);
void insert(message_t*, msg_buffer*);

/***
 * Nomenclatura: EC_(valore controllato)_(valore restituito o azione conseguente)
 *
 */

/**  Se s è NULL, restituisce -1*/
#define EC_NULL_M1(s) if((s) == NULL) {return -1;}
/** Se s è NULL, esegue f e poi restituisce -1 */
#define EC_NULL_F(s,f) if ((s) == NULL) {f; return -1;}
/** Se s è NULL, stampa messaggio d'errore ed esce chiamando la rispettiva funzione di cleanup. */
#define EC_NULL_E(s,m) if ((s) == NULL) {perror(m); exit(EXIT_FAILURE);}


#define EC_M1_E(s) if ((s) == -1) {exit(EXIT_FAILURE);}
#define EC_M1(s) if ((s) == -1) {return -1;}
#define EC_M1_P(s,m) if ((s) == -1) {perror(m);}

#define EC_Z(s) if ((s) != 0 ) {exit(EXIT_FAILURE);}

#endif /* MSG_H_ */
